home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 3 / Info_Mac_1994-01.iso / Development / Source / Little C Source / LCLib.c < prev    next >
Text File  |  1993-10-04  |  3KB  |  110 lines

  1. /****** Internal Library Functions *******/
  2.  
  3. /* Add more of your own, here. */
  4.  
  5. /* if your compiler does not support this  header file, remove it */
  6. #ifndef MACINTOSH
  7. #include <conio.h>
  8. #endif
  9.  
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12.  
  13. extern char *prog; /* points to current location in program */
  14. extern char token[80]; /* holds string representation of token */
  15. extern char token_type; /* contains type of token */
  16. extern char tok; /* holds the internal representation of token */
  17.  
  18. enum tok_types {DELIMITER, IDENTIFIER, NUMBER, COMMAND, STRING,
  19.             QUOTE, VARIABLE, BLOCK, FUNCTION};
  20.  
  21. /* These are the constants used to call sntx_err() when
  22.    a syntax error occurs.  Add more if you like.
  23.    NOTE: SYNTAX is a generic error message used when
  24.    nothing else seems appropriate.
  25. */
  26. enum error_msg 
  27.      {SYNTAX, UNBAL_PARENS, NO_EXP, EQUALS_EXPECTED,
  28.       NOT_VAR, PARAM_ERR, SEMI_EXPECTED,
  29.       UNBAL_BRACES, FUNC_UNDEF, TYPE_EXPECTED,
  30.       NEST_FUNC, RET_NOCALL, PAREN_EXPECTED,
  31.       WHILE_EXPECTED, QUOTE_EXPECTED, NOT_STRING,
  32.       TOO_MANY_LVARS};
  33. int  get_token(void);
  34. void sntx_err(int error), eval_exp(int *result);
  35. void putback(void);
  36.  
  37. /* Get a character from console.  (Use getchar()) if
  38.    your compiler does not support getche().) */
  39. call_getche()
  40. {
  41.   char ch;
  42. #ifdef MACINTOSH
  43.   ch = getchar();
  44. #else  
  45.   ch = getche();
  46. #endif
  47.   
  48.   while(*prog!=')') prog++;
  49.   prog++;   /* advance to end of line */
  50.   return ch;
  51. }
  52.  
  53. /* Put a character to the display.  (Use putchar()
  54.    if your compiler does not support putch().) */
  55. call_putch()
  56. {
  57.   int value;
  58.   eval_exp(&value);
  59.   printf("%c", value);
  60.   return value;
  61. }
  62.  
  63. /* Call puts(). */
  64. call_puts(void)
  65. {
  66.   get_token();
  67.   if(*token!='(') sntx_err(PAREN_EXPECTED);
  68.   get_token();
  69.   if(token_type!=QUOTE) sntx_err(QUOTE_EXPECTED);
  70.   puts(token);
  71.   get_token();
  72.   if(*token!=')') sntx_err(PAREN_EXPECTED);
  73.   get_token();
  74.   if(*token!=';') sntx_err(SEMI_EXPECTED);
  75.   putback();
  76.   return 0;
  77. }
  78.  
  79. /* A built-in console output function. */
  80. int print(void)
  81. {
  82.   int i;
  83.   get_token();
  84.   if(*token!='(')  sntx_err(PAREN_EXPECTED);
  85.   get_token();
  86.   if(token_type==QUOTE)    /* output a string */
  87.     printf("%s ", token);
  88.   else {  /* output a number */
  89.     putback();
  90.     eval_exp(&i);
  91.     printf("%d ", i);
  92.   }
  93.   get_token();
  94.   if(*token!=')') sntx_err(PAREN_EXPECTED);
  95.   get_token();
  96.   if(*token!=';') sntx_err(SEMI_EXPECTED);
  97.   putback();
  98.   return 0;
  99. }
  100.  
  101. /* Read an integer from the keyboard. */
  102. getnum(void)
  103. {
  104.   char s[80];
  105.   gets(s);
  106.   while(*prog!=')') prog++;
  107.   prog++;  /* advance to end of line */
  108.   return atoi(s);
  109. }
  110.